import java.lang.reflect.Array;

public class Test1 {
    public static void main(String[] args) {
        Object[] array = {1,2,3,4,"hello","ok"};
        String str = (String)array[4];
        System.out.println(str);
        Object[] array1 = {"1","2","3","4","hello","ok"};
        //String str1 = (String)array;

//        Object obj = new MyArray();
//        String str1 = (String)obj;
//        System.out.println(str1);
    }
    public static void main1(String[] args) {
        MyArray myArray = new MyArray();
        myArray.setVal(0,10);
        myArray.setVal(1,2);
        myArray.setVal(2,6);
        myArray.setVal(0,"hello");
        //下面一行会报错
     //   String str = myArray.getPos(0);//父类赋值给子类是向下转型，向下转型需要进行强转一下才不会报错。
        //向下转型应该像下面这么写
        String str = (String)myArray.getPos(0);
    }

    public static void main4(String[] args) {
        //针对下面的代码,JVM会做一些改变 把1 2 3 4 这些数据放到这个数组当中
        Object[] array = {1,2,3,4,"hello","ok"};

        //不能确定Object数组里面是否都为String，所以是不可以转的。
       // String[] arr2 = (Object)array;  //  error

        //不要像下面这么写,不要把一个Object类型的数组强制转换成一个String类型的数组。
        //虽说检查无法检查出来该错误，但一运行就会出错。
        //String[] array3 = (String[])new Object[10];
    }
}
class MyArray{
    public Object[] obj = new Object[10];
    //获取任意下标数组元素的值
    public Object getPos(int pos) {
        return obj[pos];
    }
    //往数组里面放任意类型的元素
    public void setVal(int pos,Object val){
        obj[pos] = val;
    }
}